package com.analysis.mapper;

import com.analysis.entity.Question;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 问题Mapper接口
 */
@Mapper
public interface QuestionMapper {
    
    /**
     * 插入问题
     */
    int insert(Question question);
    
    /**
     * 根据ID删除问题（物理删除）
     */
    int deleteById(@Param("id") Long id);
    
    /**
     * 根据ID逻辑删除问题（设置enable_status=0）
     */
    int logicalDeleteById(@Param("id") Long id);
    
    /**
     * 更新问题信息
     */
    int update(Question question);
    
    /**
     * 根据ID查询问题
     */
    Question selectById(@Param("id") Long id);
    
    /**
     * 根据项目ID查询问题列表
     */
    List<Question> selectByProjectId(@Param("projectId") Long projectId);
    
    /**
     * 根据品牌名称查询问题列表
     */
    List<Question> selectByProductName(@Param("productName") String productName);
    
    /**
     * 根据问题内容模糊查询
     */
    List<Question> selectByQuestionLike(@Param("question") String question);
    
    /**
     * 查询所有问题
     */
    List<Question> selectAll();
    
    /**
     * 分页查询问题
     */
    List<Question> selectByPage(@Param("offset") int offset, @Param("limit") int limit);
    
    /**
     * 统计问题总数
     */
    int countAll();
    
    /**
     * 根据条件查询问题
     */
    List<Question> selectByCondition(@Param("projectId") Long projectId,
                                    @Param("productName") String productName,
                                    @Param("question") String question,
                                    @Param("enableStatus") Integer enableStatus);
    
    /**
     * 根据品牌名称和问题查询
     */
    List<Question> selectByProductAndQuestion(@Param("productName") String productName,
                                             @Param("question") String question,
                                             @Param("projectId") Long projectId);
    
    /**
     * 根据项目ID查询所有不重复的品牌名称
     */
    List<String> selectDistinctProductNamesByProjectId(@Param("projectId") Long projectId);
    
    /**
     * 多条件分页查询问题
     */
    List<Question> selectByPageWithConditions(@Param("projectId") Long projectId,
                                            @Param("productName") String productName,
                                            @Param("question") String question,
                                            @Param("competitorName") String competitorName,
                                            @Param("offset") int offset,
                                            @Param("limit") int limit);
    
    /**
     * 多条件分页查询问题总数
     */
    int countByPageWithConditions(@Param("projectId") Long projectId,
                                 @Param("productName") String productName,
                                 @Param("question") String question,
                                 @Param("competitorName") String competitorName);
    
    /**
     * 根据产品名称和问题内容查询是否存在
     */
    Question selectByProductNameAndQuestion(@Param("productName") String productName,
                                          @Param("question") String question,
                                          @Param("projectId") Long projectId);
}
